ã»ãã·ã§ã³ç®¡çã»ãã¥ãªãã£ã®å æ¬çã¬ã€ããå®å šãªWebã¢ããªã±ãŒã·ã§ã³ãäžçèŠæš¡ã§æ§ç¯ããããã®ãã¹ããã©ã¯ãã£ã¹ãäžè¬çãªè匱æ§ãç·©åæŠç¥ã解説ã
ã»ãã·ã§ã³ç®¡çïŒã°ããŒãã«ã¢ããªã±ãŒã·ã§ã³ã®ããã®ã»ãã¥ãªãã£èæ ®äºé
ã»ãã·ã§ã³ç®¡çã¯ãWebã¢ããªã±ãŒã·ã§ã³ã®ã»ãã¥ãªãã£ã«ãããŠæ¥µããŠéèŠãªåŽé¢ã§ããããã¯ããŠãŒã¶ãŒãšWebã¢ããªã±ãŒã·ã§ã³éã®å¯Ÿè©±æéã§ãããŠãŒã¶ãŒã»ãã·ã§ã³ã管çããããšãå«ã¿ãŸããé©åã«å®è£ ãããã»ãã·ã§ã³ç®¡çã·ã¹ãã ã¯ãèªèšŒããããŠãŒã¶ãŒã®ã¿ãä¿è·ããããªãœãŒã¹ã«ã¢ã¯ã»ã¹ã§ããã»ãã·ã§ã³å šäœãéããŠãã®ããŒã¿ãä¿è·ãããããšãä¿èšŒããŸããããã¯ã倿§ãªå°ççãã±ãŒã·ã§ã³ãèŠå¶ç°å¢ã«ãŸããã£ãŠæ©å¯æ§ã®é«ããŠãŒã¶ãŒããŒã¿ãæ±ãã°ããŒãã«ã¢ããªã±ãŒã·ã§ã³ã«ãšã£ãŠç¹ã«éèŠã§ãã
ã»ãã·ã§ã³ç®¡çãšã¯ïŒ
ã»ãã·ã§ã³ç®¡çãšã¯ãè€æ°ã®ãªã¯ãšã¹ãã«ããã£ãŠWebã¢ããªã±ãŒã·ã§ã³ãšã®ãŠãŒã¶ãŒã®å¯Ÿè©±ç¶æ ãç¶æããããã»ã¹ã§ããHTTPã¯ã¹ããŒãã¬ã¹ãªãããã³ã«ã§ãããããäžé£ã®ãªã¯ãšã¹ããç¹å®ã®ãŠãŒã¶ãŒã«é¢é£ä»ããããã«ã»ãã·ã§ã³ç®¡çã®ä»çµã¿ãå¿ èŠã§ããããã¯éåžžãåãŠãŒã¶ãŒã®ã»ãã·ã§ã³ã«äžæã®ã»ãã·ã§ã³èå¥åïŒã»ãã·ã§ã³IDïŒãå²ãåœãŠãããšã«ãã£ãŠå®çŸãããŸãã
ãã®åŸãã»ãã·ã§ã³IDã¯åŸç¶ã®ãªã¯ãšã¹ãã§ãŠãŒã¶ãŒãèå¥ããããã«äœ¿çšãããŸããã»ãã·ã§ã³IDãéä¿¡ããæãäžè¬çãªæ¹æ³ã¯æ¬¡ã®ãšããã§ãã
- ã¯ãããŒ: ãŠãŒã¶ãŒã®ãã©ãŠã¶ã«ä¿åãããå°ããªããã¹ããã¡ã€ã«ã
- URLãªã©ã€ãã£ã³ã°: URLã«ã»ãã·ã§ã³IDãä»å ããã
- é ããã©ãŒã ãã£ãŒã«ã: HTMLãã©ãŒã ã«ã»ãã·ã§ã³IDãé ããã£ãŒã«ããšããŠå«ããã
- HTTPããããŒ: ã«ã¹ã¿ã HTTPããããŒã§ã»ãã·ã§ã³IDãéä¿¡ããã
ãªãã»ãã¥ã¢ãªã»ãã·ã§ã³ç®¡çãéèŠãªã®ãïŒ
ã»ãã¥ã¢ãªã»ãã·ã§ã³ç®¡çã¯ããŠãŒã¶ãŒããŒã¿ãä¿è·ããWebã¢ããªã±ãŒã·ã§ã³ãžã®äžæ£ã¢ã¯ã»ã¹ãé²ãããã«äžå¯æ¬ ã§ããã»ãã·ã§ã³ã䟵害ããããšãæ»æè ãæ£åœãªãŠãŒã¶ãŒã«ãªãããŸãããã®ã¢ã«ãŠã³ããããŒã¿ãæš©éã«ã¢ã¯ã»ã¹ã§ããããã«ãªãå¯èœæ§ããããŸããããã¯ã以äžã®ãããªæ·±å»ãªçµæãæãããšããããŸãã
- ããŒã¿äŸµå®³: å人ããŒã¿ãéèæ å ±ãæ©å¯ææžãªã©ã®æ©å¯æ§ã®é«ããŠãŒã¶ãŒæ å ±ãžã®äžæ£ã¢ã¯ã»ã¹ã
- ã¢ã«ãŠã³ãä¹ã£åã: æ»æè ããŠãŒã¶ãŒã®ã¢ã«ãŠã³ããå¶åŸ¡ããäžæ£ãªååŒããã«ãŠã§ã¢ã®æ¡æ£ãªã©ã®æªæã®ããæŽ»åãå®è¡ã§ããããã«ãªãã
- è©å€ãžã®æå®³: ã»ãã¥ãªãã£äŸµå®³ã¯äŒæ¥ã®è©å€ãæãªãã顧客ã®ä¿¡é Œãšããžãã¹ã®åªå€±ã«ã€ãªããå¯èœæ§ãããã
- ééçæå€±: ã»ãã¥ãªãã£äŸµå®³ã«å¯ŸåŠããã³ã¹ãã¯ã眰éã蚎èšè²»çšã修埩費çšãªã©ãå€é¡ã«ãªãå¯èœæ§ãããã
äžè¬çãªã»ãã·ã§ã³ç®¡çã®è匱æ§
ããã€ãã®è匱æ§ãã»ãã·ã§ã³ç®¡çã·ã¹ãã ã®ã»ãã¥ãªãã£ã䟵害ããå¯èœæ§ããããŸãããããã®è匱æ§ãèªèããé©åãªç·©åæŠç¥ãå®è£ ããããšãéèŠã§ãã
1. ã»ãã·ã§ã³ãã€ãžã£ãã¯
ã»ãã·ã§ã³ãã€ãžã£ãã¯ã¯ãæ»æè ãæå¹ãªã»ãã·ã§ã³IDãååŸããããã䜿çšããŠæ£åœãªãŠãŒã¶ãŒã«ãªãããŸãå Žåã«çºçããŸããããã¯ã次ã®ãããªããŸããŸãªæ¹æ³ã§éæãããå¯èœæ§ããããŸãã
- ã¯ãã¹ãµã€ãã¹ã¯ãªããã£ã³ã°ïŒXSSïŒ: ã¯ãããŒã«ä¿åãããŠããã»ãã·ã§ã³IDãçãããšãã§ããæªæã®ããã¹ã¯ãªããããŠã§ããµã€ãã«æ³šå ¥ããã
- ãããã¯ãŒã¯ã¹ãããã£ã³ã°: ãããã¯ãŒã¯ãã©ãã£ãã¯ãååããŠããã¬ãŒã³ããã¹ãã§éä¿¡ãããã»ãã·ã§ã³IDããã£ããã£ããã
- ãã«ãŠã§ã¢: ãŠãŒã¶ãŒã®ã³ã³ãã¥ãŒã¿ãŒã«ã»ãã·ã§ã³IDãçãããšãã§ãããã«ãŠã§ã¢ãã€ã³ã¹ããŒã«ããã
- ãœãŒã·ã£ã«ãšã³ãžãã¢ãªã³ã°: ãŠãŒã¶ãŒãã ãŸããŠã»ãã·ã§ã³IDãæããããã
äŸ: æ»æè ãXSSã䜿çšããŠããã©ãŒã©ã ã®ãŠã§ããµã€ãã«ã¹ã¯ãªãããæ³šå ¥ããŸãããŠãŒã¶ãŒããã®ãã©ãŒã©ã ã«ã¢ã¯ã»ã¹ãããšãã¹ã¯ãªããããã®ãŠãŒã¶ãŒã®ã»ãã·ã§ã³IDãçã¿ãæ»æè ã®ãµãŒããŒã«éä¿¡ããŸããæ»æè ã¯ãã®åŸãçãã ã»ãã·ã§ã³IDã䜿çšããŠãŠãŒã¶ãŒã®ã¢ã«ãŠã³ãã«ã¢ã¯ã»ã¹ã§ããŸãã
2. ã»ãã·ã§ã³åºå®æ»æïŒã»ãã·ã§ã³ãã£ã¯ã»ãŒã·ã§ã³ïŒ
ã»ãã·ã§ã³åºå®æ»æã¯ãæ»æè ããŠãŒã¶ãŒãã ãŸããŠãæ»æè ããã§ã«ç¥ã£ãŠããã»ãã·ã§ã³IDã䜿çšãããå Žåã«çºçããŸããããã¯ã次ã®ããã«ããŠéæã§ããŸãã
- URLã§ã»ãã·ã§ã³IDãæäŸãã: æ»æè ããURLã«ç¹å®ã®ã»ãã·ã§ã³IDãåã蟌ãŸãããŠã§ããµã€ããžã®ãªã³ã¯ããŠãŒã¶ãŒã«éä¿¡ããã
- ã¯ãããŒãä»ããŠã»ãã·ã§ã³IDãèšå®ãã: æ»æè ãããŠãŒã¶ãŒã®ã³ã³ãã¥ãŒã¿ãŒã«ç¹å®ã®ã»ãã·ã§ã³IDãæã€ã¯ãããŒãèšå®ããã
ã¢ããªã±ãŒã·ã§ã³ãé©åãªæ€èšŒãªãã«äºåã«èšå®ãããã»ãã·ã§ã³IDãåãå ¥ããå Žåãæ»æè ã¯èªåã§ã¢ããªã±ãŒã·ã§ã³ã«ãã°ã€ã³ãããŠãŒã¶ãŒããã°ã€ã³ãããšãã«ãã®ãŠãŒã¶ãŒã®ã»ãã·ã§ã³ã«ã¢ã¯ã»ã¹ã§ããŸãã
äŸ: æ»æè ããŠãŒã¶ãŒã«ãã»ãã·ã§ã³IDãåã蟌ãŸããéè¡ã®ãŠã§ããµã€ããžã®ãªã³ã¯ãéä¿¡ããŸãããŠãŒã¶ãŒã¯ãã®ãªã³ã¯ãã¯ãªãã¯ããŠèªåã®ã¢ã«ãŠã³ãã«ãã°ã€ã³ããŸãããã§ã«ã»ãã·ã§ã³IDãç¥ã£ãŠããæ»æè ã¯ãããã䜿çšããŠãŠãŒã¶ãŒã®ã¢ã«ãŠã³ãã«ã¢ã¯ã»ã¹ã§ããŸãã
3. ã¯ãã¹ãµã€ããªã¯ãšã¹ããã©ãŒãžã§ãªïŒCSRFïŒ
CSRFã¯ãæ»æè ããŠãŒã¶ãŒãã ãŸããŠããã®ãŠãŒã¶ãŒãèªèšŒãããŠããWebã¢ããªã±ãŒã·ã§ã³ã§æå³ããªãã¢ã¯ã·ã§ã³ãå®è¡ãããå Žåã«çºçããŸããããã¯éåžžãã¿ãŒã²ããã®Webã¢ããªã±ãŒã·ã§ã³ãžã®ãªã¯ãšã¹ããããªã¬ãŒããæªæã®ããHTMLã³ãŒãããŠã§ããµã€ããã¡ãŒã«ã«åã蟌ãããšã«ãã£ãŠéæãããŸãã
äŸ: ãŠãŒã¶ãŒããªã³ã©ã€ã³ãã³ãã³ã°ã®ã¢ã«ãŠã³ãã«ãã°ã€ã³ããŠããŸããæ»æè ããŠãŒã¶ãŒã«æªæã®ãããªã³ã¯ãå«ãã¡ãŒã«ãéä¿¡ãããŠãŒã¶ãŒããããã¯ãªãã¯ãããšããŠãŒã¶ãŒã®ã¢ã«ãŠã³ãããæ»æè ã®ã¢ã«ãŠã³ãã«ãéãééãããŸãããŠãŒã¶ãŒã¯ãã§ã«èªèšŒãããŠãããããéè¡ã®ã¢ããªã±ãŒã·ã§ã³ã¯ãããªãèªèšŒãªãã«ãªã¯ãšã¹ããåŠçããŸãã
4. äºæž¬å¯èœãªã»ãã·ã§ã³ID
ã»ãã·ã§ã³IDãäºæž¬å¯èœã§ããå Žåãæ»æè ã¯æå¹ãªã»ãã·ã§ã³IDãæšæž¬ããä»ã®ãŠãŒã¶ãŒã®ã»ãã·ã§ã³ã«ã¢ã¯ã»ã¹ã§ããŸããããã¯ãã»ãã·ã§ã³IDçæã¢ã«ãŽãªãºã ã匱ãããã·ãŒã±ã³ã·ã£ã«ãªçªå·ãã¿ã€ã ã¹ã¿ã³ããªã©ã®äºæž¬å¯èœãªå€ã䜿çšããŠããå Žåã«çºçããå¯èœæ§ããããŸãã
äŸ: ãããŠã§ããµã€ããã»ãã·ã§ã³IDãšããŠé£çªã䜿çšããŠããŸããæ»æè ã¯çŸåšã®ã»ãã·ã§ã³IDã墿žãããããšã§ãä»ã®ãŠãŒã¶ãŒã®ã»ãã·ã§ã³IDãç°¡åã«æšæž¬ã§ããŸãã
5. URLã§ã®ã»ãã·ã§ã³IDã®æŒæŽ©
URLã§ã»ãã·ã§ã³IDãå ¬éãããšã次ã®ãããªããŸããŸãªæ»æã«å¯ŸããŠè匱ã«ãªãå¯èœæ§ããããŸãã
- URLã®å ±æ: ãŠãŒã¶ãŒã誀ã£ãŠã»ãã·ã§ã³IDãå«ãURLãä»ã®äººãšå ±æããŠããŸãå¯èœæ§ãããã
- ãã©ãŠã¶ã®å±¥æŽ: URLå ã®ã»ãã·ã§ã³IDããã©ãŠã¶ã®å±¥æŽã«ä¿åããããŠãŒã¶ãŒã®ã³ã³ãã¥ãŒã¿ãŒã«ã¢ã¯ã»ã¹ã§ããæ»æè ãã¢ã¯ã»ã¹å¯èœã«ãªãå¯èœæ§ãããã
- ãªãã¡ã©ããããŒ: URLå ã®ã»ãã·ã§ã³IDããªãã¡ã©ããããŒã§ä»ã®ãŠã§ããµã€ãã«éä¿¡ãããå¯èœæ§ãããã
äŸ: ãŠãŒã¶ãŒãã»ãã·ã§ã³IDãå«ãURLãã³ããŒããŠã¡ãŒã«ã«è²Œãä»ããååã«éä¿¡ããŸãããã®ååã¯ããã®ã»ãã·ã§ã³IDã䜿çšããŠãŠãŒã¶ãŒã®ã¢ã«ãŠã³ãã«ã¢ã¯ã»ã¹ã§ããŸãã
6. å®å šã§ãªãã»ãã·ã§ã³ã¹ãã¬ãŒãž
ãµãŒããŒäžã§ã»ãã·ã§ã³IDãå®å šã§ãªãæ¹æ³ã§ä¿åãããŠããå ŽåããµãŒããŒã«ã¢ã¯ã»ã¹ããæ»æè ãã»ãã·ã§ã³IDãçã¿ããŠãŒã¶ãŒã«ãªãããŸãããšãã§ããå¯èœæ§ããããŸããããã¯ãã»ãã·ã§ã³IDãããŒã¿ããŒã¹ããã°ãã¡ã€ã«ã«ãã¬ãŒã³ããã¹ãã§ä¿åãããŠããå Žåã«çºçããå¯èœæ§ããããŸãã
äŸ: ãããŠã§ããµã€ããããŒã¿ããŒã¹ã«ã»ãã·ã§ã³IDããã¬ãŒã³ããã¹ãã§ä¿åããŠããŸããæ»æè ãããŒã¿ããŒã¹ã«ã¢ã¯ã»ã¹ããã»ãã·ã§ã³IDãçã¿ãŸããæ»æè ã¯ãã®åŸãçãã ã»ãã·ã§ã³IDã䜿çšããŠãŠãŒã¶ãŒã¢ã«ãŠã³ãã«ã¢ã¯ã»ã¹ã§ããŸãã
7. é©åãªã»ãã·ã§ã³æå¹æéã®æ¬ åŠ
ã»ãã·ã§ã³ã«é©åãªæå¹æéã¡ã«ããºã ããªãå ŽåããŠãŒã¶ãŒããã°ã¢ãŠãããããã©ãŠã¶ãéãããããåŸã§ããã»ãã·ã§ã³ãç¡æéã«ã¢ã¯ãã£ããªãŸãŸã«ãªãå¯èœæ§ããããŸããããã«ãããæ»æè ãæéåãã®ã»ãã·ã§ã³IDã䜿çšããŠãŠãŒã¶ãŒã®ã¢ã«ãŠã³ãã«ã¢ã¯ã»ã¹ã§ããå¯èœæ§ããããããã»ãã·ã§ã³ãã€ãžã£ãã¯ã®ãªã¹ã¯ãé«ãŸããŸãã
äŸ: ãŠãŒã¶ãŒãå ¬å ±ã®ã³ã³ãã¥ãŒã¿ãŒã§ãŠã§ããµã€ãã«ãã°ã€ã³ãããã°ã¢ãŠããå¿ããŠããŸããŸããã»ãã·ã§ã³ã®æå¹æéãåããŠããªãå Žåãæ¬¡ã«ãã®ã³ã³ãã¥ãŒã¿ãŒã䜿çšãããŠãŒã¶ãŒãåã®ãŠãŒã¶ãŒã®ã¢ã«ãŠã³ãã«ã¢ã¯ã»ã¹ã§ããŠããŸãå¯èœæ§ããããŸãã
ã»ãã·ã§ã³ç®¡çã®ã»ãã¥ãªãã£ãã¹ããã©ã¯ãã£ã¹
ã»ãã·ã§ã³ç®¡çã®è匱æ§ã«é¢é£ãããªã¹ã¯ã軜æžããããã«ã¯ã以äžã®ã»ãã¥ãªãã£ãã¹ããã©ã¯ãã£ã¹ãå®è£ ããããšãéèŠã§ãã
1. 匷åãªã»ãã·ã§ã³IDã䜿çšãã
ã»ãã·ã§ã³IDã¯ãæå·è«çã«å®å šãªä¹±æ°çæåšïŒCSPRNGïŒã䜿çšããŠçæãããã«ãŒããã©ãŒã¹æ»æãé²ãã®ã«ååãªé·ãã§ããå¿ èŠããããŸããæäœ128ãããã®é·ããæšå¥šãããŸããã·ãŒã±ã³ã·ã£ã«ãªçªå·ãã¿ã€ã ã¹ã¿ã³ããªã©ã®äºæž¬å¯èœãªå€ã®äœ¿çšã¯é¿ããŠãã ããã
äŸ: PHPã®`random_bytes()`颿°ãJavaã®`java.security.SecureRandom`ã¯ã©ã¹ã䜿çšããŠã匷åãªã»ãã·ã§ã³IDãçæããŸãã
2. ã»ãã·ã§ã³IDãå®å šã«ä¿åãã
ã»ãã·ã§ã³IDã¯ãµãŒããŒäžã§å®å šã«ä¿åããå¿ èŠããããŸããããŒã¿ããŒã¹ããã°ãã¡ã€ã«ã«ãã¬ãŒã³ããã¹ãã§ä¿åããã®ã¯é¿ããŠãã ããã代ããã«ãSHA-256ãbcryptãªã©ã®äžæ¹åããã·ã¥é¢æ°ã䜿çšããŠãä¿åããåã«ã»ãã·ã§ã³IDãããã·ã¥åããŸããããã«ãããæ»æè ãããŒã¿ããŒã¹ããã°ãã¡ã€ã«ã«ã¢ã¯ã»ã¹ããŠãã»ãã·ã§ã³IDãçãããšãã§ããªããªããŸãã
äŸ: PHPã®`password_hash()`颿°ãSpring Securityã®`BCryptPasswordEncoder`ã¯ã©ã¹ã䜿çšããŠãããŒã¿ããŒã¹ã«ä¿åããåã«ã»ãã·ã§ã³IDãããã·ã¥åããŸãã
3. ã»ãã¥ã¢ãªã¯ãããŒã䜿çšãã
ã¯ãããŒã䜿çšããŠã»ãã·ã§ã³IDãä¿åããå Žåã以äžã®ã»ãã¥ãªãã£å±æ§ãèšå®ãããŠããããšã確èªããŠãã ããã
- Secure: ãã®å±æ§ã¯ãã¯ãããŒãHTTPSæ¥ç¶çµç±ã§ã®ã¿éä¿¡ãããããšãä¿èšŒããŸãã
- HttpOnly: ãã®å±æ§ã¯ãã¯ã©ã€ã¢ã³ããµã€ãã®ã¹ã¯ãªãããã¯ãããŒã«ã¢ã¯ã»ã¹ããã®ãé²ããXSSæ»æã®ãªã¹ã¯ã軜æžããŸãã
- SameSite: ãã®å±æ§ã¯ãã©ã®ãŠã§ããµã€ããã¯ãããŒã«ã¢ã¯ã»ã¹ã§ããããå¶åŸ¡ããããšã§ãCSRFæ»æãé²ãã®ã«åœ¹ç«ã¡ãŸããã¢ããªã±ãŒã·ã§ã³ã®ããŒãºã«å¿ããŠ`Strict`ãŸãã¯`Lax`ã«èšå®ããŸãã`Strict`ã¯æã匷åãªä¿è·ãæäŸããŸããããŠãŒã¶ããªãã£ã«åœ±é¿ãäžããå¯èœæ§ããããŸãã
äŸ: PHPã§`setcookie()`颿°ã䜿çšããŠã¯ãããŒå±æ§ãèšå®ããŸãã
setcookie("session_id", $session_id, [ 'secure' => true, 'httponly' => true, 'samesite' => 'Strict' ]);
4. é©åãªã»ãã·ã§ã³æå¹æéãå®è£ ãã
ã»ãã·ã§ã³ã«ã¯ãæ»æè ãã»ãã·ã§ã³ããã€ãžã£ãã¯ããæ©äŒã®çªãå¶éããããã«ãå®çŸ©ãããæå¹æéãå¿ èŠã§ãã劥åœãªæå¹æéã¯ãããŒã¿ã®æ©å¯æ§ãã¢ããªã±ãŒã·ã§ã³ã®ãªã¹ã¯èš±å®¹åºŠã«ãã£ãŠç°ãªããŸãã以äžã®äž¡æ¹ãå®è£ ããŠãã ããã
- ã¢ã€ãã«ã¿ã€ã ã¢ãŠã: äžå®æé掻åããªãå Žåã«ã»ãã·ã§ã³ãæéåãã«ãªãããã«ããŸãã
- 絶察ã¿ã€ã ã¢ãŠã: 掻åã«é¢ä¿ãªããäžå®æéãçµéãããã»ãã·ã§ã³ãæéåãã«ãªãããã«ããŸãã
ã»ãã·ã§ã³ã®æå¹æéãåããããã»ãã·ã§ã³IDãç¡å¹ã«ãããŠãŒã¶ãŒã«åèªèšŒãèŠæ±ããå¿ èŠããããŸãã
äŸ: PHPã§ã¯ã`session.gc_maxlifetime`èšå®ãªãã·ã§ã³ã䜿çšããããã»ãã·ã§ã³ãéå§ããåã«`session_set_cookie_params()`ãåŒã³åºãããšã§ãã»ãã·ã§ã³ã®æå¹æéãèšå®ã§ããŸãã
5. èªèšŒåŸã«ã»ãã·ã§ã³IDãåçæãã
ã»ãã·ã§ã³åºå®æ»æãé²ãããããŠãŒã¶ãŒãæ£åžžã«èªèšŒãããåŸã«ã»ãã·ã§ã³IDãåçæããŸããããã«ããããŠãŒã¶ãŒãæ°ããäºæž¬äžå¯èœãªã»ãã·ã§ã³IDã䜿çšããããšãä¿èšŒãããŸãã
äŸ: PHPã®`session_regenerate_id()`颿°ã䜿çšããŠãèªèšŒåŸã«ã»ãã·ã§ã³IDãåçæããŸãã
6. ãã¹ãŠã®ãªã¯ãšã¹ãã§ã»ãã·ã§ã³IDãæ€èšŒãã
ãã¹ãŠã®ãªã¯ãšã¹ãã§ã»ãã·ã§ã³IDãæ€èšŒãããããæå¹ã§ãããæ¹ãããããŠããªãããšã確èªããŸããããã¯ãã»ãã·ã§ã³ãã€ãžã£ãã¯æ»æãé²ãã®ã«åœ¹ç«ã¡ãŸãã
äŸ: ãªã¯ãšã¹ããåŠçããåã«ãã»ãã·ã§ã³ã¹ãã¬ãŒãžã«ã»ãã·ã§ã³IDãååšããæåŸ ãããå€ãšäžèŽãããã©ããã確èªããŸãã
7. HTTPSã䜿çšãã
åžžã«HTTPSã䜿çšããŠããŠãŒã¶ãŒã®ãã©ãŠã¶ãšWebãµãŒããŒéã®ãã¹ãŠã®éä¿¡ãæå·åããŸããããã«ãããæ»æè ããããã¯ãŒã¯äžã§éä¿¡ãããã»ãã·ã§ã³IDãååããã®ãé²ããŸããä¿¡é Œã§ããèšŒææžèªèšŒå±ïŒCAïŒããSSL/TLSèšŒææžãååŸããWebãµãŒããŒãHTTPSã䜿çšããããã«èšå®ããŸãã
8. ã¯ãã¹ãµã€ãã¹ã¯ãªããã£ã³ã°ïŒXSSïŒããä¿è·ãã
ãã¹ãŠã®ãŠãŒã¶ãŒå ¥åãæ€èšŒããã³ãµãã¿ã€ãºããããšã§ãXSSæ»æãé²ããŸãããŠãŒã¶ãŒçæã³ã³ãã³ããããŒãžã«è¡šç€ºããåã«ãåºåãšã³ã³ãŒãã£ã³ã°ã䜿çšããŠæœåšçã«æªæã®ããæåããšã¹ã±ãŒãããŸããã³ã³ãã³ãã»ãã¥ãªãã£ããªã·ãŒïŒCSPïŒãå®è£ ããŠããã©ãŠã¶ããªãœãŒã¹ãããŒãã§ãããœãŒã¹ãå¶éããŸãã
9. ã¯ãã¹ãµã€ããªã¯ãšã¹ããã©ãŒãžã§ãªïŒCSRFïŒããä¿è·ãã
ã¢ã³ãCSRFããŒã¯ã³ã䜿çšããŠCSRFä¿è·ãå®è£ ããŸãããããã®ããŒã¯ã³ã¯ãåãªã¯ãšã¹ãã«å«ãŸããäžæã§äºæž¬äžå¯èœãªå€ã§ãããµãŒããŒã¯åãªã¯ãšã¹ãã§ããŒã¯ã³ãæ€èšŒãããªã¯ãšã¹ããæ£åœãªãŠãŒã¶ãŒããçºä¿¡ãããããšã確èªããŸãã
äŸ: ã·ã³ã¯ããã€ã¶ãŒããŒã¯ã³ãã¿ãŒã³ãããã«ãµããããã¯ãããŒãã¿ãŒã³ã䜿çšããŠCSRFä¿è·ãå®è£ ããŸãã
10. ã»ãã·ã§ã³ã¢ã¯ãã£ããã£ãç£èŠããã³ãã°èšé²ãã
ã»ãã·ã§ã³ã¢ã¯ãã£ããã£ãç£èŠããã³ãã°èšé²ããŠãç°åžžãªãã°ã€ã³è©Šè¡ãäºæããªãIPã¢ãã¬ã¹ãéå°ãªãªã¯ãšã¹ããªã©ã®çãããè¡åãæ€åºããŸããäŸµå ¥æ€ç¥ã·ã¹ãã ïŒIDSïŒãã»ãã¥ãªãã£æ å ±ããã³ã€ãã³ã管çïŒSIEMïŒã·ã¹ãã ã䜿çšããŠãã°ããŒã¿ãåæããæœåšçãªã»ãã¥ãªãã£è åšãç¹å®ããŸãã
11. ãœãããŠã§ã¢ã宿çã«æŽæ°ãã
ãªãã¬ãŒãã£ã³ã°ã·ã¹ãã ãWebãµãŒããŒãWebã¢ããªã±ãŒã·ã§ã³ãã¬ãŒã ã¯ãŒã¯ãå«ããã¹ãŠã®ãœãããŠã§ã¢ã³ã³ããŒãã³ãããææ°ã®ã»ãã¥ãªãã£ãããã§ææ°ã®ç¶æ ã«ä¿ã¡ãŸããããã«ãããã»ãã·ã§ã³ç®¡çã䟵害ããããã«æªçšãããå¯èœæ§ã®ããæ¢ç¥ã®è匱æ§ããä¿è·ã§ããŸãã
12. ã»ãã¥ãªãã£ç£æ»ãšãããã¬ãŒã·ã§ã³ãã¹ã
宿çãªã»ãã¥ãªãã£ç£æ»ãšãããã¬ãŒã·ã§ã³ãã¹ãã宿œããŠãã»ãã·ã§ã³ç®¡çã·ã¹ãã ã®è匱æ§ãç¹å®ããŸããã»ãã¥ãªãã£å°éå®¶ãšååããŠãã³ãŒããèšå®ãã€ã³ãã©ã¹ãã©ã¯ãã£ã確èªããæœåšçãªåŒ±ç¹ãç¹å®ããŸãã
ããŸããŸãªãã¯ãããžãŒã«ãããã»ãã·ã§ã³ç®¡ç
ã»ãã·ã§ã³ç®¡çã®å ·äœçãªå®è£ ã¯ã䜿çšãããæè¡ã¹ã¿ãã¯ã«ãã£ãŠç°ãªããŸãã以äžã«ããã€ãã®äŸã瀺ããŸãã
PHP
PHPã¯ã`session_start()`ã`session_id()`ã`$_SESSION`ã`session_destroy()`ãªã©ã®çµã¿èŸŒã¿ã®ã»ãã·ã§ã³ç®¡çæ©èœãæäŸããŸãã`session.cookie_secure`ã`session.cookie_httponly`ã`session.gc_maxlifetime`ãªã©ãPHPã®ã»ãã·ã§ã³èšå®ãå®å šã«æ§æããããšãéèŠã§ãã
JavaïŒãµãŒãã¬ãããšJSPïŒ
JavaãµãŒãã¬ããã¯ãã»ãã·ã§ã³ã管çããããã®`HttpSession`ã€ã³ã¿ãŒãã§ãŒã¹ãæäŸããŸãã`HttpServletRequest.getSession()`ã¡ãœããã¯ãã»ãã·ã§ã³ããŒã¿ã®ä¿åãšååŸã«äœ¿çšã§ãã`HttpSession`ãªããžã§ã¯ããè¿ããŸããã¯ãããŒã®ã»ãã¥ãªãã£ã®ããã«ãµãŒãã¬ããã³ã³ããã¹ããã©ã¡ãŒã¿ãèšå®ããããšã確èªããŠãã ããã
PythonïŒFlaskãšDjangoïŒ
FlaskãšDjangoã¯ãçµã¿èŸŒã¿ã®ã»ãã·ã§ã³ç®¡çã¡ã«ããºã ãæäŸããŸããFlaskã¯`session`ãªããžã§ã¯ãã䜿çšããDjangoã¯`request.session`ãªããžã§ã¯ãã䜿çšããŸããã»ãã¥ãªãã£ã匷åããããã«ãDjangoã§`SESSION_COOKIE_SECURE`ã`SESSION_COOKIE_HTTPONLY`ã`CSRF_COOKIE_SECURE`ã®èšå®ãæ§æããŸãã
Node.jsïŒExpressïŒ
Express.jsã¯ãã»ãã·ã§ã³ã管çããããã«`express-session`ã®ãããªããã«ãŠã§ã¢ãå¿ èŠãšããŸããã»ãã¥ã¢ãªã¯ãããŒèšå®ãšCSRFä¿è·ã¯ã`csurf`ã®ãããªããã«ãŠã§ã¢ã䜿çšããŠå®è£ ããå¿ èŠããããŸãã
ã°ããŒãã«ãªèæ ®äºé
ã°ããŒãã«ã¢ããªã±ãŒã·ã§ã³ãéçºããéã«ã¯ã次ã®ç¹ãèæ ®ããŠãã ããã
- ããŒã¿ã¬ãžãã³ã·ãŒ: ååœã®ããŒã¿ã¬ãžãã³ã·ãŒèŠä»¶ãçè§£ããŸããã»ãã·ã§ã³ããŒã¿ãããšãŒãããã®GDPRãªã©ã®çŸå°ã®èŠå¶ã«æºæ ããŠä¿åããã³åŠçãããããšã確èªããŸãã
- ããŒã«ãªãŒãŒã·ã§ã³: è€æ°ã®èšèªãšå°åèšå®ããµããŒãããããã«ãé©åãªããŒã«ãªãŒãŒã·ã§ã³ãšåœéåïŒi18nïŒãå®è£ ããŸããé©åãªæå衚çŸãä¿èšŒããããã«ãã»ãã·ã§ã³ããŒã¿ã¯UTF-8ã§ãšã³ã³ãŒãããå¿ èŠããããŸãã
- ã¿ã€ã ãŸãŒã³: ã»ãã·ã§ã³ã®æå¹æéã管çããéã«ãã¿ã€ã ãŸãŒã³ãæ£ããåŠçããŸããã»ãã·ã§ã³ã®ã¿ã€ã ã¹ã¿ã³ããä¿åããããã«UTCæéã䜿çšãã衚瀺ã®ããã«ãŠãŒã¶ãŒã®ããŒã«ã«ã¿ã€ã ãŸãŒã³ã«å€æããŸãã
- ã¢ã¯ã»ã·ããªãã£: WCAGã¬ã€ãã©ã€ã³ã«åŸããã¢ã¯ã»ã·ããªãã£ã念é ã«çœ®ããŠã¢ããªã±ãŒã·ã§ã³ãèšèšããŸããã»ãã·ã§ã³ç®¡çã¡ã«ããºã ãé害ã®ãããŠãŒã¶ãŒã«ãã¢ã¯ã»ã¹å¯èœã§ããããšã確èªããŸãã
- ã³ã³ãã©ã€ã¢ã³ã¹: ã¯ã¬ãžããã«ãŒãããŒã¿ãæ±ãã¢ããªã±ãŒã·ã§ã³ã«ã€ããŠã¯ãPCI DSSãªã©ã®é¢é£ããã»ãã¥ãªãã£åºæºããã³èŠå¶ãéµå®ããŸãã
çµè«
ã»ãã¥ã¢ãªã»ãã·ã§ã³ç®¡çã¯ãWebã¢ããªã±ãŒã·ã§ã³ã»ãã¥ãªãã£ã®éèŠãªåŽé¢ã§ãããã®ã¬ã€ãã§æŠèª¬ããäžè¬çãªè匱æ§ãçè§£ããã»ãã¥ãªãã£ã®ãã¹ããã©ã¯ãã£ã¹ãå®è£ ããããšã§ããŠãŒã¶ãŒããŒã¿ãä¿è·ããäžæ£ã¢ã¯ã»ã¹ãé²ãå ç¢ã§å®å šãªWebã¢ããªã±ãŒã·ã§ã³ãæ§ç¯ã§ããŸããã»ãã¥ãªãã£ã¯ç¶ç¶çãªããã»ã¹ã§ãããé²åããè åšã«å ãããããã«ãã»ãã·ã§ã³ç®¡çã·ã¹ãã ãç¶ç¶çã«ç£èŠããã³æ¹åããããšãäžå¯æ¬ ã§ããããšãå¿ããªãã§ãã ããã